package com.baifc.aop;

import org.springframework.context.annotation.*;
import org.springframework.test.context.ContextConfiguration;

/**
 * projectName: spring-in-action
 * packageName: com.baifc.aop
 * Created: 2019/5/4.
 * Auther: baifc
 * Description:
 */
@Configuration
// 如果不配置该注解，即便Audience配置了@AspectJ注解，也只能是spring中的一个bean，并不会被视为切面，aspect的相关注解也不会被解析
// 也不会创建将其转换为切面的代理
// EnableAspectJAutoProxy启用自动代理功能，会为使用@AspectJ注解的bean自动创建一个代理，这个代理会围绕所有该切面的切点所匹配的bean
// 若bean在xml中装配，则需要配置xml<aop:aspectj-autoproxy />
//@EnableAspectJAutoProxy
@ComponentScan
@ImportResource("classpath:applicationContext.xml")
public class ConcertConfig {

    // 这个做为aop的bean，将在xml中装配
//    @Bean
//    public Audience audienceBean() {
//        return new Audience();
//    }

    // TODO 为什么切面的bean配置在xml中时， 被通知的bean不能显示的配置在java配置中，这种情况会导致AutoWried注入失败。
    //  反而使用ComponentScan注解，自动装配bean则可以正常注入。
//    @Bean
//    public Performance performance() {
//        return new Concert();
//    }

    @Bean
    public EncoreAbleIntroducer encoreAbleIntroducer() {
        return new EncoreAbleIntroducer();
    }
}
